import os
from configparser import ConfigParser
from dataclasses import dataclass
# 从constants.py导入路径常量（假设已定义）
from config.constants import *



# __file__ 是当前脚本文件的路径。
_conf_dir = os.path.dirname(__file__)
# 将目录路径和配置文件名拼接成完整的文件路径
_conf_file = os.path.join(_conf_dir, 'config.ini')

# 继承 ConfigParser 类，添加 as_dict() 方法，将配置内容转换为字典格式。
# self._sections 是 ConfigParser 内部存储配置节的属性，包含了所有配置节及其键值对
class MyParser(ConfigParser):
    def as_dict(self):
        d = dict(self._sections)
        return d


# 读取配置文件的函数

def _get_all_conf():
    # 创建自定义解析器实例 _config。
    _config = MyParser()
    result = {}
    # 检查配置文件是否存在（os.path.isfile()）。
    if os.path.isfile(_conf_file):
        try:
            # 使用 _config.read() 读取配置文件，指定编码为 UTF-8。
            _config.read(_conf_file, encoding='utf-8')
            # 调用 as_dict() 方法将配置转换为字典。
            result = _config.as_dict()
        except OSError:
            # 异常处理：如果读取失败，抛出包含错误信息的 ValueError。
            raise ValueError('Read config file faild:%s' % OSError)
    return result


# 加载配置并提取特定配置项
# 调用 _get_all_conf() 函数获取所有配置
config = _get_all_conf()
# 从配置字典中提取配置节，使用get方法避免KeyError
mysql_cfg = config.get('mysql', {})
smtp_cfg = config.get('smtp', {})
driver_cfg = config.get('driver', {})